"""
一个无序的键值对集合，键是唯一的，而值可以重复。
字典使用 {} 定义，键（key）和值（value）使用 : 连接，每个键值对之间使用 , 分隔。如{key1 : value1, key2 : value2}
字典没有索引。
字典可以通过键来获取对应的值。
值可以取任何数据类型，但键必须是不可变的，如字符串、数字、元组。
"""

# 创建字典
dict1 = {}
dict2 = dict()
dict3 = {"name": "Alice", "age": 18, "gender": "male"}
dict4 = dict(name="Bob", age=20, gender="female")
dict5 = dict([("name", "Tom"), ("age", 22), ("gender", "male")])
print(dict1)
print(dict2)
print(dict3)
print(dict4)
print(dict5)

# 通过字典推导式创建字典
squares = {x: x**2 for x in range(4)}
print(squares)  # {0: 0, 1: 1, 2: 4, 3: 9}


# 字典操作
user = {
    "username": "张三",
    "age": 18,
    "sex": "男"
}


user["address"] = "向字典中添加值"
user["age"] = 20 # 修改字典的值

print(f"username是否是字典的key {"username" in user}")
print(f"获取字典的长度 {len(user)}")
print(f"删除字典中的某个key")
del user["username"]

try: 
    print("访问字典中的某个不存在的key ", user["username"]) # 如果访问的key不存在会报错
except Exception as e:
    print("访问字典中的某个不存在的key或出错:", type(e).__name__, e)

print("访问字典中的某个不存在的key,返回默认值", user.get("username", "返回默认值"))

print("打印字典", user)
print("打印字典的所有key", user.keys())
print("打印字典的所有值", user.values())
print("打印字典的key和值", user.items())
print("获取字典的某个key的值", user["username"])

for key, value in user.items():
    print(key, value)